package com.guoxin.prototype.improve;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import lombok.Data;

/**
 * 浅拷贝
 * 
 * @author guoxin
 * @date 2019年8月16日
 */
@Data
public class Sheep implements Cloneable,Serializable {
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;
	private String color;
	private Sheep friend;

	/**
	 * 深拷贝 方式1 使用clone方法
	 */
	@Override
	protected Object clone() throws CloneNotSupportedException {
		Sheep sheep = (Sheep) super.clone();
		if (friend != null) {
			sheep.friend = (Sheep) friend.clone();
		}
		return sheep;
	}

	
	/**
	 * 深拷贝 方式2 使用序列号方法
	 */
	public Object deepClone() {
		// 创建流对象
		ByteArrayOutputStream bos = null;
		ObjectOutputStream oos = null;
		ByteArrayInputStream bis = null;
		ObjectInputStream ois = null;

		try {
			// 序列化
			bos = new ByteArrayOutputStream();
			oos = new ObjectOutputStream(bos);
			oos.writeObject(this);
			// 反序列化
			bis = new ByteArrayInputStream(bos.toByteArray());
			ois = new ObjectInputStream(bis);
			return ois.readObject();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}
